#ifndef BSP_GPIO_H
#define BSP_GPIO_H

#include "stm32f1xx_hal.h"
// USER LED
#define USER_LED_GPIO_CLK_ENABLE()    __HAL_RCC_GPIOC_CLK_ENABLE()
#define USER_LED_GPIO_PORT            GPIOC
#define USER_LED_GPIO_PIN             GPIO_PIN_13
#define USER_LED_OFF()                HAL_GPIO_WritePin(USER_LED_GPIO_PORT, USER_LED_GPIO_PIN, GPIO_PIN_SET)
#define USER_LED_ON()                 HAL_GPIO_WritePin(USER_LED_GPIO_PORT, USER_LED_GPIO_PIN, GPIO_PIN_RESET)
#define USER_LED_TOGGLE()             HAL_GPIO_TogglePin(USER_LED_GPIO_PORT, USER_LED_GPIO_PIN)
// DEBUG UART
#define DEBUG_UART_GPIO_CLK_ENABLE()  __HAL_RCC_GPIOA_CLK_ENABLE()
#define DEBUG_UART_TX_GPIO_PORT       GPIOA
#define DEBUG_UART_TX_GPIO_PIN        GPIO_PIN_9
#define DEBUG_UART_RX_GPIO_PORT       GPIOA
#define DEBUG_UART_RX_GPIO_PIN        GPIO_PIN_10
// SCREEN UART
#define SCREEN_UART_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define SCREEN_UART_TX_GPIO_PORT      GPIOB
#define SCREEN_UART_TX_GPIO_PIN       GPIO_PIN_10
#define SCREEN_UART_RX_GPIO_PORT      GPIOB
#define SCREEN_UART_RX_GPIO_PIN       GPIO_PIN_11
// DHT11
#define DHT11_GPIO_CLK_ENABLE()       __HAL_RCC_GPIOB_CLK_ENABLE()
#define DHT11_GPIO_PORT               GPIOB
#define DHT11_GPIO_PIN                GPIO_PIN_12
// HOTLED
#define HOTLED_GPIO_CLK_ENABLE()       __HAL_RCC_GPIOB_CLK_ENABLE()
#define HOTLED_GPIO_PORT               GPIOB
#define HOTLED_GPIO_PIN                GPIO_PIN_9
// WATLED
#define WATLED_GPIO_CLK_ENABLE()       __HAL_RCC_GPIOB_CLK_ENABLE()
#define WATLED_GPIO_PORT               GPIOB
#define WATLED_GPIO_PIN                GPIO_PIN_8
// WATHOT
#define WATHOT_GPIO_CLK_ENABLE()       __HAL_RCC_GPIOB_CLK_ENABLE()
#define WATHOT_GPIO_PORT               GPIOB
#define WATHOT_GPIO_PIN                GPIO_PIN_7
// BUZZER
#define BUZZER_GPIO_CLK_ENABLE()       __HAL_RCC_GPIOB_CLK_ENABLE()
#define BUZZER_GPIO_PORT               GPIOB
#define BUZZER_GPIO_PIN                GPIO_PIN_13
// DS18B20
#define DS18B20_GPIO_CLK_ENABLE()     __HAL_RCC_GPIOB_CLK_ENABLE()
#define OW_GPIO_PORT                  GPIOB
#define OW_GPIO_PIN                   GPIO_PIN_14
// VL53L0X
#define VL53L0X_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define VL53L0X_SCL_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define VL53L0X_SDA_GPIO_PORT         GPIOB
#define VL53L0X_SCL_GPIO_PORT         GPIOB
#define VL53L0X_SDA_GPIO_PIN          GPIO_PIN_3
#define VL53L0X_SCL_GPIO_PIN          GPIO_PIN_4
// 霍尔传感器中断
#define HALL_GPIO_CLK_ENABLE()        __HAL_RCC_GPIOA_CLK_ENABLE()
#define HALL_GPIO_PORT                GPIOA
#define HALL_GPIO_PIN                 GPIO_PIN_1
#define HALL_EXTI_IRQn                EXTI1_IRQn
#define HALL_EXTI_IRQHandler          EXTI1_IRQHandler
// 风扇相关 GPIO
#define FAN_PWM_GPIO_CLK_ENABLE()     __HAL_RCC_GPIOA_CLK_ENABLE()
#define FAN_PWM_GPIO_PORT             GPIOA
#define FAN_PWM_GPIO_PIN              GPIO_PIN_6
#define TB6612_AIN_GPIO_CLK_ENABLE()  __HAL_RCC_GPIOA_CLK_ENABLE()
#define TB6612_AIN1_GPIO_PORT         GPIOA
#define TB6612_AIN1_GPIO_PIN          GPIO_PIN_4
#define TB6612_AIN2_GPIO_PORT         GPIOA
#define TB6612_AIN2_GPIO_PIN          GPIO_PIN_5
//函数声明
void UserLed_GPIO_Init(void);
void DebugUart_GPIO_Init(void);
void ScreenUart_GPIO_Init(void);
void DHT11_GPIO_Init(void);
void DS18B20_GPIO_Init(void);
void Hall_GPIO_Init(void);
void Fan_PWM_GPIO_Init(void);
void TB6612_AIN_GPIO_Init(void);
void HOTLED_GPIO_Init(void);
void WATLED_GPIO_Init(void);
void WATHOT_GPIO_Init(void);
void BUZZER_GPIO_Init(void);
#endif